# Bazel build
# C/C++ documentation: https://docs.bazel.build/versions/master/be/c-cpp.html

load("//bazel:ray.bzl", "COPTS")

cc_library(
    name = "ray_api",
    srcs = glob([
        "src/ray/api.cc",
        "src/ray/api/*.cc",
        "src/ray/api/*.h",
        "src/ray/app/*.cc",
        "src/ray/app/*.h",
        "src/ray/runtime/*.cc",
        "src/ray/runtime/*.h",
        "src/ray/runtime/**/*.cc",
        "src/ray/runtime/**/*.h",
        "src/ray/runtime/task/*.cc",
        "src/ray/runtime/task/*.h",
        "src/ray/util/*.cc",
        "src/ray/util/*.h",
        "src/ray/*.cc",
        "src/ray/*.h",
    ]),
    hdrs = glob([
        "include/ray/*.h",
        "include/ray/**/*.h",
        "include/ray/**/**/*.h",
    ]),
    copts = COPTS,
    linkopts = ["-ldl"],
    linkstatic = True,
    strip_include_prefix = "include",
    visibility = ["//visibility:public"],
    deps = [
        "//:core_worker_lib",
        "//:ray_common",
        "//:ray_util",
        "@boost//:callable_traits",
        "@boost//:dll",
        "@com_github_gflags_gflags//:gflags",
        "@msgpack",
    ],
)

cc_binary(
    name = "default_worker",
    srcs = glob([
        "src/ray/worker/default_worker.cc",
    ]),
    copts = COPTS,
    linkstatic = True,
    deps = [
        "ray_api",
    ],
)

genrule(
    name = "ray_cpp_pkg",
    srcs = [
        "default_worker",
        "ray_api",
    ],
    outs = ["ray_cpp_pkg.out"],
    cmd = """
        WORK_DIR="$$(pwd)" &&
        mkdir -p "$$WORK_DIR/python/ray/core/src/ray/cpp/" &&
        cp -f $(location default_worker) "$$WORK_DIR/python/ray/core/src/ray/cpp/default_worker" &&
        cp -f $(locations ray_api) "$$WORK_DIR/python/ray/core/src/ray/cpp/" &&
        echo "$$WORK_DIR" > $@
    """,
    local = 1,
    visibility = ["//visibility:public"],
)

# test
cc_test(
    name = "api_test",
    srcs = glob([
        "src/ray/test/*.cc",
    ]),
    copts = COPTS,
    linkstatic = False,
    deps = [
        "ray_api",
        "@boost//:filesystem",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_test(
    name = "cluster_mode_test",
    testonly = 0,
    srcs = glob([
        "src/ray/test/cluster/*.cc",
    ]),
    args = [
        "--ray-dynamic-library-path=$(location cluster_mode_test.so)",
    ],
    copts = COPTS,
    data = [
        "cluster_mode_test.so",
        "ray_cpp_pkg",
    ],
    linkstatic = True,
    deps = [
        "ray_api",
        "@com_github_gflags_gflags//:gflags",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_binary(
    name = "cluster_mode_test.so",
    srcs = glob([
        "src/ray/test/cluster/*.cc",
    ]),
    copts = COPTS,
    linkopts = ["-shared"],
    linkstatic = True,
    deps = [
        "ray_api",
        "@com_github_gflags_gflags//:gflags",
        "@com_google_googletest//:gtest_main",
    ],
)
